//
//  UIImage+Extension.swift
//  aaa
//
//  Created by miaozhihui on 2017/2/8.
//  Copyright © 2017年 DeKuTree. All rights reserved.
//

import UIKit

extension UIImage {
    
    /// 将给定的图像按照大小进行拉伸、裁剪，返回圆形的新图像
    ///
    /// - Parameters:
    ///   - size: 目标图像大小
    ///   - bgColor: 背景颜色,如果传nil,默认black
    ///   - sideLineColor: 边线颜色,如果传nil,默认black
    ///   - sideLineWidth: 边线宽度
    /// - Returns: 拉伸、裁剪过的新图像
    func drawCircle(size:CGSize, bgColor:UIColor?, sideLineColor:UIColor?,sideLineWidth:CGFloat = 1.0) -> UIImage? {
        let rect = CGRect(origin: CGPoint.zero, size: size)
        /*
         参数：
         1> size: 绘图的尺寸
         2> 不透明: 给true，false的话有性能影响
         3> scale: 屏幕分辨率,默认生成的图像使用1.0的分辨率，图像质量不好
         可以指定0，指定0会使用当前设备的屏幕分辨率
         */
        // 1.获取上下文
        UIGraphicsBeginImageContextWithOptions(size, true, 0)
        // 1.0背景填充
        // 1.0.1设置填充颜色
        bgColor?.setFill()
        // 1.0.2设置填充路径
        UIRectFill(rect)
        // 1.1实例化一个圆形路径
        let path = UIBezierPath(ovalIn: rect)
        // 1.2进行路径裁切 - 后续的绘图，都会出现在圆形路径内部，外部的全部干掉
        path.addClip()
        // 2.绘图 drawInRect 就是在指定区域内拉伸图像
        self.draw(in: rect)
        // 2.0设置path的边线
        // 2.0.1设置path的边线颜色
        sideLineColor?.setStroke()
        // 2.0.2设置path的线宽
        path.lineWidth = sideLineWidth
        // 2.0.3绘制边线
        path.stroke()
        // 3.取得结果
        let result = UIGraphicsGetImageFromCurrentImageContext()
        // 4.关闭上下文
        UIGraphicsEndImageContext()
        // 5.返回结果
        return result
    }
    
    /// 将给定的图像按照大小进行伸缩，返回伸缩后的新图像
    ///
    /// - Parameter size: 目标图像大小
    /// - Returns: 伸缩后的新图像
    func draw(size:CGSize) -> UIImage? {
        let rect = CGRect(origin: CGPoint.zero, size: size)
        // 1.获取上下文
        UIGraphicsBeginImageContextWithOptions(size, true, 0)
        // 2.绘图 drawInRect 就是在指定区域内拉伸图像
        self.draw(in: rect)
        // 3.取得结果
        let result = UIGraphicsGetImageFromCurrentImageContext()
        // 4.关闭上下文
        UIGraphicsEndImageContext()
        // 5.返回结果
        return result
    }
}
